﻿<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xapi="urn:xapi" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl xapi">
  <xsl:import href="Common.xslt"/>
  <xsl:param name="id"/>
  <xsl:param name="ns"/>
 
  <!--ROOT-->
  <xsl:output method="text" indent="no"/>
  <xsl:template match="/">
    <xsl:apply-templates select="/assembly"/>
  </xsl:template>

  <!--DOCUMENT-->
  <xsl:template match="/assembly">
    <xsl:call-template name="processType">
      <xsl:with-param name="type" select="/assembly/namespace[@caption=$ns]/*[@id=$id]" />
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="processType">
    <xsl:param name="type"/>
    <xsl:text>#summary API documentation for the </xsl:text>
    <xsl:value-of select="$type/@caption"/>
    <xsl:text> type
#labels WikiDoc,Type
#sidebar </xsl:text>
    <xsl:value-of select="$type/@sidebar"/>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="$type/comments" mode="h1"/>
    <xsl:text>
</xsl:text>
    <xsl:text>= Members =
</xsl:text>
    <xsl:choose>
      <!--HANDLE ENUM DISPLAY-->
      <xsl:when test="name($type)='enum'">
        <xsl:if test="$type/field">
          <xsl:text>== Values ==
|| *Name* || *Literal* || *Comments* ||
</xsl:text>
          <xsl:apply-templates select="$type/field">
            <xsl:sort select="@literalValue" data-type="number"/>
          </xsl:apply-templates>
          <xsl:text>
</xsl:text>
        </xsl:if>
      </xsl:when>
      <xsl:otherwise>
        <!--DISPLAY FULL TYPES-->
        <xsl:if test="$type/field">
          <xsl:text>== Fields ==
|| *Name* || *Literal* || *Comments* ||
</xsl:text>
          <xsl:apply-templates select="$type/field">
            <xsl:sort select="@caption"/>
          </xsl:apply-templates>
          <xsl:text>
</xsl:text>
        </xsl:if>
        <xsl:if test="$type/property">
          <xsl:text>== Properties ==
</xsl:text>
          <xsl:apply-templates select="$type/property">
            <xsl:sort select="@caption"/>
          </xsl:apply-templates>
          <xsl:text>
</xsl:text>
        </xsl:if>
        <xsl:if test="$type/method">
          <xsl:text>== Methods ==
</xsl:text>
          <xsl:if test="$type/method[@isConstructor]">
            <xsl:text>=== Constructors ===
</xsl:text>
            <xsl:apply-templates select="$type/method[@isConstructor]">
              <xsl:sort select="@caption"/>
            </xsl:apply-templates>
          </xsl:if>

          <xsl:variable name="uniqueMethodNames" select="$type/method[not(@isConstructor) and not(@name=following::location/@name)]" />
          <xsl:for-each select="$uniqueMethodNames">
            <xsl:sort select="@name"/>
            <xsl:variable name="thisName" select="@name"/>
            <xsl:text>=== </xsl:text>
            <xsl:value-of select="xapi:escapeWikiLink(string(@name))"/>
            <xsl:text> ===
</xsl:text>
            <xsl:apply-templates select="$type/method[@name=$thisName]">
              <xsl:sort select="@caption"/>
            </xsl:apply-templates>
          </xsl:for-each>
          
          <xsl:if test="$type/method[not(@isConstructor)]">
            
            
          </xsl:if>
        </xsl:if>
        <xsl:if test="$type/event">
          <xsl:text>== Events ==
</xsl:text>
          <xsl:apply-templates select="$type/event">
            <xsl:sort select="@caption"/>
          </xsl:apply-templates>
          <xsl:text>
</xsl:text>
        </xsl:if>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!--ENUM FIELD-->
  <xsl:template match="field">
    <xsl:text>|| </xsl:text>
    <xsl:value-of select="xapi:escapeWikiLink(@caption)"/>
    <xsl:text> || </xsl:text>
    <xsl:value-of select="@literalValue"/>
    <xsl:text> || </xsl:text>
    <xsl:value-of select="normalize-space(comments)"/>
    <xsl:text> ||
</xsl:text>
  </xsl:template>

  <!--PROPERTY-->
  <xsl:template match="property">
    <xsl:text>=== `</xsl:text>
    <xsl:value-of select="xapi:escapeWikiLink(@caption)"/>
    <xsl:text> `===
</xsl:text>
    <xsl:apply-templates select="comments" mode="h4"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <!--METHOD-->
  <xsl:template match="method">
    <xsl:text>||</xsl:text>
    <xsl:value-of select="xapi:escapeWikiLink(@caption)"/>
    <xsl:text>||</xsl:text>
    <xsl:apply-templates select="comments" mode="h5"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <!--EVENT-->
  <xsl:template match="event">
    <xsl:text>=== `</xsl:text>
    <xsl:value-of select="xapi:escapeWikiLink(@caption)"/>
    <xsl:text> `===
</xsl:text>
    <xsl:apply-templates select="comments" mode="h4"/>
    <xsl:text>
</xsl:text>
  </xsl:template>
  
</xsl:stylesheet>
